// Copyright (C) 2019-2020 star.engine at outlook dot com
//
// This file is part of StarEngine
//
// StarEngine is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published
// by the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// StarEngine is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with StarEngine.  If not, see <https://www.gnu.org/licenses/>.

#pragma once

namespace Star::Graphics::Render {

using GPU_VIRTUAL_ADDRESS = uint64_t;

#define STAR_16BIT_INDEX_STRIP_CUT_VALUE	( 0xffff )

#define STAR_32BIT_INDEX_STRIP_CUT_VALUE	( 0xffffffff )

#define STAR_8BIT_INDEX_STRIP_CUT_VALUE	( 0xff )

#define STAR_APPEND_ALIGNED_ELEMENT	( 0xffffffff )

#define STAR_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT	( 9 )

#define STAR_CLIP_OR_CULL_DISTANCE_COUNT	( 8 )

#define STAR_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT	( 2 )

#define STAR_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT	( 14 )

#define STAR_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS	( 4 )

#define STAR_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT	( 15 )

#define STAR_COMMONSHADER_CONSTANT_BUFFER_PARTIAL_UPDATE_EXTENTS_BYTE_ALIGNMENT	( 16 )

#define STAR_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS	( 4 )

#define STAR_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT	( 15 )

#define STAR_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST	( 1 )

#define STAR_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS	( 1 )

#define STAR_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT	( 64 )

#define STAR_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS	( 4 )

#define STAR_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT	( 1 )

#define STAR_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST	( 1 )

#define STAR_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS	( 1 )

#define STAR_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT	( 32 )

#define STAR_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS	( 1 )

#define STAR_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT	( 128 )

#define STAR_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST	( 1 )

#define STAR_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS	( 1 )

#define STAR_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT	( 128 )

#define STAR_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS	( 1 )

#define STAR_COMMONSHADER_SAMPLER_REGISTER_COUNT	( 16 )

#define STAR_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST	( 1 )

#define STAR_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS	( 1 )

#define STAR_COMMONSHADER_SAMPLER_SLOT_COUNT	( 16 )

#define STAR_COMMONSHADER_SUBROUTINE_NESTING_LIMIT	( 32 )

#define STAR_COMMONSHADER_TEMP_REGISTER_COMPONENTS	( 4 )

#define STAR_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_COMMONSHADER_TEMP_REGISTER_COUNT	( 4096 )

#define STAR_COMMONSHADER_TEMP_REGISTER_READS_PER_INST	( 3 )

#define STAR_COMMONSHADER_TEMP_REGISTER_READ_PORTS	( 3 )

#define STAR_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX	( 10 )

#define STAR_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN	( -10 )

#define STAR_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE	( -8 )

#define STAR_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE	( 7 )

#define STAR_CONSTANT_BUFFER_DATA_PLACEMENT_ALIGNMENT	( 256 )

#define STAR_CS_4_X_BUCKET00_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 256 )

#define STAR_CS_4_X_BUCKET00_MAX_NUM_THREADS_PER_GROUP	( 64 )

#define STAR_CS_4_X_BUCKET01_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 240 )

#define STAR_CS_4_X_BUCKET01_MAX_NUM_THREADS_PER_GROUP	( 68 )

#define STAR_CS_4_X_BUCKET02_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 224 )

#define STAR_CS_4_X_BUCKET02_MAX_NUM_THREADS_PER_GROUP	( 72 )

#define STAR_CS_4_X_BUCKET03_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 208 )

#define STAR_CS_4_X_BUCKET03_MAX_NUM_THREADS_PER_GROUP	( 76 )

#define STAR_CS_4_X_BUCKET04_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 192 )

#define STAR_CS_4_X_BUCKET04_MAX_NUM_THREADS_PER_GROUP	( 84 )

#define STAR_CS_4_X_BUCKET05_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 176 )

#define STAR_CS_4_X_BUCKET05_MAX_NUM_THREADS_PER_GROUP	( 92 )

#define STAR_CS_4_X_BUCKET06_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 160 )

#define STAR_CS_4_X_BUCKET06_MAX_NUM_THREADS_PER_GROUP	( 100 )

#define STAR_CS_4_X_BUCKET07_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 144 )

#define STAR_CS_4_X_BUCKET07_MAX_NUM_THREADS_PER_GROUP	( 112 )

#define STAR_CS_4_X_BUCKET08_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 128 )

#define STAR_CS_4_X_BUCKET08_MAX_NUM_THREADS_PER_GROUP	( 128 )

#define STAR_CS_4_X_BUCKET09_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 112 )

#define STAR_CS_4_X_BUCKET09_MAX_NUM_THREADS_PER_GROUP	( 144 )

#define STAR_CS_4_X_BUCKET10_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 96 )

#define STAR_CS_4_X_BUCKET10_MAX_NUM_THREADS_PER_GROUP	( 168 )

#define STAR_CS_4_X_BUCKET11_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 80 )

#define STAR_CS_4_X_BUCKET11_MAX_NUM_THREADS_PER_GROUP	( 204 )

#define STAR_CS_4_X_BUCKET12_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 64 )

#define STAR_CS_4_X_BUCKET12_MAX_NUM_THREADS_PER_GROUP	( 256 )

#define STAR_CS_4_X_BUCKET13_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 48 )

#define STAR_CS_4_X_BUCKET13_MAX_NUM_THREADS_PER_GROUP	( 340 )

#define STAR_CS_4_X_BUCKET14_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 32 )

#define STAR_CS_4_X_BUCKET14_MAX_NUM_THREADS_PER_GROUP	( 512 )

#define STAR_CS_4_X_BUCKET15_MAX_BYTES_TGSM_WRITABLE_PER_THREAD	( 16 )

#define STAR_CS_4_X_BUCKET15_MAX_NUM_THREADS_PER_GROUP	( 768 )

#define STAR_CS_4_X_DISPATCH_MAX_THREAD_GROUPS_IN_Z_DIMENSION	( 1 )

#define STAR_CS_4_X_RAW_UAV_BYTE_ALIGNMENT	( 256 )

#define STAR_CS_4_X_THREAD_GROUP_MAX_THREADS_PER_GROUP	( 768 )

#define STAR_CS_4_X_THREAD_GROUP_MAX_X	( 768 )

#define STAR_CS_4_X_THREAD_GROUP_MAX_Y	( 768 )

#define STAR_CS_4_X_UAV_REGISTER_COUNT	( 1 )

#define STAR_CS_DISPATCH_MAX_THREAD_GROUPS_PER_DIMENSION	( 65535 )

#define STAR_CS_TGSM_REGISTER_COUNT	( 8192 )

#define STAR_CS_TGSM_REGISTER_READS_PER_INST	( 1 )

#define STAR_CS_TGSM_RESOURCE_REGISTER_COMPONENTS	( 1 )

#define STAR_CS_TGSM_RESOURCE_REGISTER_READ_PORTS	( 1 )

#define STAR_CS_THREADGROUPID_REGISTER_COMPONENTS	( 3 )

#define STAR_CS_THREADGROUPID_REGISTER_COUNT	( 1 )

#define STAR_CS_THREADIDINGROUPFLATTENED_REGISTER_COMPONENTS	( 1 )

#define STAR_CS_THREADIDINGROUPFLATTENED_REGISTER_COUNT	( 1 )

#define STAR_CS_THREADIDINGROUP_REGISTER_COMPONENTS	( 3 )

#define STAR_CS_THREADIDINGROUP_REGISTER_COUNT	( 1 )

#define STAR_CS_THREADID_REGISTER_COMPONENTS	( 3 )

#define STAR_CS_THREADID_REGISTER_COUNT	( 1 )

#define STAR_CS_THREAD_GROUP_MAX_THREADS_PER_GROUP	( 1024 )

#define STAR_CS_THREAD_GROUP_MAX_X	( 1024 )

#define STAR_CS_THREAD_GROUP_MAX_Y	( 1024 )

#define STAR_CS_THREAD_GROUP_MAX_Z	( 64 )

#define STAR_CS_THREAD_GROUP_MIN_X	( 1 )

#define STAR_CS_THREAD_GROUP_MIN_Y	( 1 )

#define STAR_CS_THREAD_GROUP_MIN_Z	( 1 )

#define STAR_CS_THREAD_LOCAL_TEMP_REGISTER_POOL	( 16384 )

#define STAR_DEFAULT_DEPTH_BIAS	( 0 )

#define STAR_DEFAULT_MAX_ANISOTROPY	( 16 )

#define STAR_DEFAULT_MSAA_RESOURCE_PLACEMENT_ALIGNMENT	( 4194304 )

#define STAR_DEFAULT_RENDER_TARGET_ARRAY_INDEX	( 0 )

#define STAR_DEFAULT_RESOURCE_PLACEMENT_ALIGNMENT	( 65536 )

#define STAR_DEFAULT_SAMPLE_MASK	( 0xffffffff )

#define STAR_DEFAULT_SCISSOR_ENDX	( 0 )

#define STAR_DEFAULT_SCISSOR_ENDY	( 0 )

#define STAR_DEFAULT_SCISSOR_STARTX	( 0 )

#define STAR_DEFAULT_SCISSOR_STARTY	( 0 )

#define STAR_DEFAULT_STENCIL_READ_MASK	( 0xff )

#define STAR_DEFAULT_STENCIL_REFERENCE	( 0 )

#define STAR_DEFAULT_STENCIL_WRITE_MASK	( 0xff )

#define STAR_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX	( 0 )

#define STAR_DEFAULT_VIEWPORT_HEIGHT	( 0 )

#define STAR_DEFAULT_VIEWPORT_TOPLEFTX	( 0 )

#define STAR_DEFAULT_VIEWPORT_TOPLEFTY	( 0 )

#define STAR_DEFAULT_VIEWPORT_WIDTH	( 0 )

#define STAR_DESCRIPTOR_RANGE_OFFSET_APPEND	( 0xffffffff )

#define STAR_DRIVER_RESERVED_REGISTER_SPACE_VALUES_END	( 0xfffffff7 )

#define STAR_DRIVER_RESERVED_REGISTER_SPACE_VALUES_START	( 0xfffffff0 )

#define STAR_DS_INPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS	( 3968 )

#define STAR_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENTS	( 4 )

#define STAR_DS_INPUT_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_DS_INPUT_CONTROL_POINT_REGISTER_COUNT	( 32 )

#define STAR_DS_INPUT_CONTROL_POINT_REGISTER_READS_PER_INST	( 2 )

#define STAR_DS_INPUT_CONTROL_POINT_REGISTER_READ_PORTS	( 1 )

#define STAR_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENTS	( 3 )

#define STAR_DS_INPUT_DOMAIN_POINT_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_DS_INPUT_DOMAIN_POINT_REGISTER_COUNT	( 1 )

#define STAR_DS_INPUT_DOMAIN_POINT_REGISTER_READS_PER_INST	( 2 )

#define STAR_DS_INPUT_DOMAIN_POINT_REGISTER_READ_PORTS	( 1 )

#define STAR_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENTS	( 4 )

#define STAR_DS_INPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_DS_INPUT_PATCH_CONSTANT_REGISTER_COUNT	( 32 )

#define STAR_DS_INPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST	( 2 )

#define STAR_DS_INPUT_PATCH_CONSTANT_REGISTER_READ_PORTS	( 1 )

#define STAR_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS	( 1 )

#define STAR_DS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_DS_INPUT_PRIMITIVE_ID_REGISTER_COUNT	( 1 )

#define STAR_DS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST	( 2 )

#define STAR_DS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS	( 1 )

#define STAR_DS_OUTPUT_REGISTER_COMPONENTS	( 4 )

#define STAR_DS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_DS_OUTPUT_REGISTER_COUNT	( 32 )

#define STAR_GS_INPUT_INSTANCE_ID_READS_PER_INST	( 2 )

#define STAR_GS_INPUT_INSTANCE_ID_READ_PORTS	( 1 )

#define STAR_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENTS	( 1 )

#define STAR_GS_INPUT_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_GS_INPUT_INSTANCE_ID_REGISTER_COUNT	( 1 )

#define STAR_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS	( 1 )

#define STAR_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_GS_INPUT_PRIM_CONST_REGISTER_COUNT	( 1 )

#define STAR_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST	( 2 )

#define STAR_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS	( 1 )

#define STAR_GS_INPUT_REGISTER_COMPONENTS	( 4 )

#define STAR_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_GS_INPUT_REGISTER_COUNT	( 32 )

#define STAR_GS_INPUT_REGISTER_READS_PER_INST	( 2 )

#define STAR_GS_INPUT_REGISTER_READ_PORTS	( 1 )

#define STAR_GS_INPUT_REGISTER_VERTICES	( 32 )

#define STAR_GS_MAX_INSTANCE_COUNT	( 32 )

#define STAR_GS_MAX_OUTPUT_VERTEX_COUNT_ACROSS_INSTANCES	( 1024 )

#define STAR_GS_OUTPUT_ELEMENTS	( 32 )

#define STAR_GS_OUTPUT_REGISTER_COMPONENTS	( 4 )

#define STAR_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_GS_OUTPUT_REGISTER_COUNT	( 32 )

#define STAR_HS_CONTROL_POINT_PHASE_INPUT_REGISTER_COUNT	( 32 )

#define STAR_HS_CONTROL_POINT_PHASE_OUTPUT_REGISTER_COUNT	( 32 )

#define STAR_HS_CONTROL_POINT_REGISTER_COMPONENTS	( 4 )

#define STAR_HS_CONTROL_POINT_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_HS_CONTROL_POINT_REGISTER_READS_PER_INST	( 2 )

#define STAR_HS_CONTROL_POINT_REGISTER_READ_PORTS	( 1 )

#define STAR_HS_FORK_PHASE_INSTANCE_COUNT_UPPER_BOUND	( 0xffffffff )

#define STAR_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENTS	( 1 )

#define STAR_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_HS_INPUT_FORK_INSTANCE_ID_REGISTER_COUNT	( 1 )

#define STAR_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READS_PER_INST	( 2 )

#define STAR_HS_INPUT_FORK_INSTANCE_ID_REGISTER_READ_PORTS	( 1 )

#define STAR_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENTS	( 1 )

#define STAR_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_COUNT	( 1 )

#define STAR_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READS_PER_INST	( 2 )

#define STAR_HS_INPUT_JOIN_INSTANCE_ID_REGISTER_READ_PORTS	( 1 )

#define STAR_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENTS	( 1 )

#define STAR_HS_INPUT_PRIMITIVE_ID_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_HS_INPUT_PRIMITIVE_ID_REGISTER_COUNT	( 1 )

#define STAR_HS_INPUT_PRIMITIVE_ID_REGISTER_READS_PER_INST	( 2 )

#define STAR_HS_INPUT_PRIMITIVE_ID_REGISTER_READ_PORTS	( 1 )

#define STAR_HS_JOIN_PHASE_INSTANCE_COUNT_UPPER_BOUND	( 0xffffffff )

#define STAR_HS_OUTPUT_CONTROL_POINTS_MAX_TOTAL_SCALARS	( 3968 )

#define STAR_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENTS	( 1 )

#define STAR_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_COUNT	( 1 )

#define STAR_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READS_PER_INST	( 2 )

#define STAR_HS_OUTPUT_CONTROL_POINT_ID_REGISTER_READ_PORTS	( 1 )

#define STAR_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENTS	( 4 )

#define STAR_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_HS_OUTPUT_PATCH_CONSTANT_REGISTER_COUNT	( 32 )

#define STAR_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READS_PER_INST	( 2 )

#define STAR_HS_OUTPUT_PATCH_CONSTANT_REGISTER_READ_PORTS	( 1 )

#define STAR_HS_OUTPUT_PATCH_CONSTANT_REGISTER_SCALAR_COMPONENTS	( 128 )

#define STAR_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES	( 0 )

#define STAR_IA_DEFAULT_PRIMITIVE_TOPOLOGY	( 0 )

#define STAR_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES	( 0 )

#define STAR_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT	( 1 )

#define STAR_IA_INSTANCE_ID_BIT_COUNT	( 32 )

#define STAR_IA_INTEGER_ARITHMETIC_BIT_COUNT	( 32 )

#define STAR_IA_PATCH_MAX_CONTROL_POINT_COUNT	( 32 )

#define STAR_IA_PRIMITIVE_ID_BIT_COUNT	( 32 )

#define STAR_IA_VERTEX_ID_BIT_COUNT	( 32 )

#define STAR_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT	( 32 )

#define STAR_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS	( 128 )

#define STAR_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT	( 32 )

#define STAR_INTEGER_DIVIDE_BY_ZERO_QUOTIENT	( 0xffffffff )

#define STAR_INTEGER_DIVIDE_BY_ZERO_REMAINDER	( 0xffffffff )

#define STAR_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL	( 0xffffffff )

#define STAR_KEEP_UNORDERED_ACCESS_VIEWS	( 0xffffffff )

#define STAR_MAJOR_VERSION	( 12 )

#define STAR_MAX_LIVE_STATIC_SAMPLERS	( 2032 )

#define STAR_MAX_MAXANISOTROPY	( 16 )

#define STAR_MAX_MULTISAMPLE_SAMPLE_COUNT	( 32 )

#define STAR_MAX_ROOT_COST	( 64 )

#define STAR_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_1	( 1000000 )

#define STAR_MAX_SHADER_VISIBLE_DESCRIPTOR_HEAP_SIZE_TIER_2	( 1000000 )

#define STAR_MAX_SHADER_VISIBLE_SAMPLER_HEAP_SIZE	( 2048 )

#define STAR_MAX_TEXTURE_DIMENSION_2_TO_EXP	( 17 )

#define STAR_MAX_VIEW_INSTANCE_COUNT	( 4 )

#define STAR_MINOR_VERSION	( 0 )

#define STAR_MIN_MAXANISOTROPY	( 0 )

#define STAR_MIP_LOD_FRACTIONAL_BIT_COUNT	( 8 )

#define STAR_MIP_LOD_RANGE_BIT_COUNT	( 8 )

#define STAR_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT	( 0 )

#define STAR_OS_RESERVED_REGISTER_SPACE_VALUES_END	( 0xffffffff )

#define STAR_OS_RESERVED_REGISTER_SPACE_VALUES_START	( 0xfffffff8 )

#define STAR_PACKED_TILE	( 0xffffffff )

#define STAR_PIXEL_ADDRESS_RANGE_BIT_COUNT	( 15 )

#define STAR_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT	( 16 )

#define STAR_PS_CS_UAV_REGISTER_COMPONENTS	( 1 )

#define STAR_PS_CS_UAV_REGISTER_COUNT	( 8 )

#define STAR_PS_CS_UAV_REGISTER_READS_PER_INST	( 1 )

#define STAR_PS_CS_UAV_REGISTER_READ_PORTS	( 1 )

#define STAR_PS_FRONTFACING_DEFAULT_VALUE	( 0xffffffff )

#define STAR_PS_FRONTFACING_FALSE_VALUE	( 0 )

#define STAR_PS_FRONTFACING_TRUE_VALUE	( 0xffffffff )

#define STAR_PS_INPUT_REGISTER_COMPONENTS	( 4 )

#define STAR_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_PS_INPUT_REGISTER_COUNT	( 32 )

#define STAR_PS_INPUT_REGISTER_READS_PER_INST	( 2 )

#define STAR_PS_INPUT_REGISTER_READ_PORTS	( 1 )

#define STAR_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS	( 1 )

#define STAR_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_PS_OUTPUT_DEPTH_REGISTER_COUNT	( 1 )

#define STAR_PS_OUTPUT_MASK_REGISTER_COMPONENTS	( 1 )

#define STAR_PS_OUTPUT_MASK_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_PS_OUTPUT_MASK_REGISTER_COUNT	( 1 )

#define STAR_PS_OUTPUT_REGISTER_COMPONENTS	( 4 )

#define STAR_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_PS_OUTPUT_REGISTER_COUNT	( 8 )

#define STAR_RAW_UAV_SRV_BYTE_ALIGNMENT	( 16 )

#define STAR_RAYTRACING_AABB_BYTE_ALIGNMENT	( 8 )

#define STAR_RAYTRACING_ACCELERATION_STRUCTURE_BYTE_ALIGNMENT	( 256 )

#define STAR_RAYTRACING_INSTANCE_DESCS_BYTE_ALIGNMENT	( 16 )

#define STAR_RAYTRACING_MAX_ATTRIBUTE_SIZE_IN_BYTES	( 32 )

#define STAR_RAYTRACING_MAX_DECLARABLE_TRACE_RECURSION_DEPTH	( 31 )

#define STAR_RAYTRACING_MAX_GEOMETRIES_PER_BOTTOM_LEVEL_ACCELERATION_STRUCTURE	( 16777216 )

#define STAR_RAYTRACING_MAX_INSTANCES_PER_TOP_LEVEL_ACCELERATION_STRUCTURE	( 16777216 )

#define STAR_RAYTRACING_MAX_PRIMITIVES_PER_BOTTOM_LEVEL_ACCELERATION_STRUCTURE	( 536870912 )

#define STAR_RAYTRACING_MAX_RAY_GENERATION_SHADER_THREADS	( 1073741824 )

#define STAR_RAYTRACING_MAX_SHADER_RECORD_STRIDE	( 4096 )

#define STAR_RAYTRACING_SHADER_RECORD_BYTE_ALIGNMENT	( 32 )

#define STAR_RAYTRACING_SHADER_TABLE_BYTE_ALIGNMENT	( 64 )

#define STAR_RAYTRACING_TRANSFORM3X4_BYTE_ALIGNMENT	( 16 )

#define STAR_REQ_BLEND_OBJECT_COUNT_PER_DEVICE	( 4096 )

#define STAR_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP	( 27 )

#define STAR_REQ_CONSTANT_BUFFER_ELEMENT_COUNT	( 4096 )

#define STAR_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_DEVICE	( 4096 )

#define STAR_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP	( 32 )

#define STAR_REQ_DRAW_VERTEX_COUNT_2_TO_EXP	( 32 )

#define STAR_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION	( 16384 )

#define STAR_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT	( 1024 )

#define STAR_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT	( 4096 )

#define STAR_REQ_MAXANISOTROPY	( 16 )

#define STAR_REQ_MIP_LEVELS	( 15 )

#define STAR_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES	( 2048 )

#define STAR_REQ_RASTERIZER_OBJECT_COUNT_PER_DEVICE	( 4096 )

#define STAR_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH	( 16384 )

#define STAR_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_A_TERM	( 128 )

#define STAR_REQ_RESOURCE_SIZE_IN_MEGABYTES_EXPRESSION_C_TERM	( 2048 )

#define STAR_REQ_RESOURCE_VIEW_COUNT_PER_DEVICE_2_TO_EXP	( 20 )

#define STAR_REQ_SAMPLER_OBJECT_COUNT_PER_DEVICE	( 4096 )

#define STAR_REQ_SUBRESOURCES	( 30720 )

#define STAR_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION	( 2048 )

#define STAR_REQ_TEXTURE1D_U_DIMENSION	( 16384 )

#define STAR_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION	( 2048 )

#define STAR_REQ_TEXTURE2D_U_OR_V_DIMENSION	( 16384 )

#define STAR_REQ_TEXTURE3D_U_V_OR_W_DIMENSION	( 2048 )

#define STAR_REQ_TEXTURECUBE_DIMENSION	( 16384 )

#define STAR_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL	( 0 )

#define STAR_RESOURCE_BARRIER_ALL_SUBRESOURCES	( 0xffffffff )

#define STAR_RS_SET_SHADING_RATE_COMBINER_COUNT	( 2 )

#define STAR_SHADER_IDENTIFIER_SIZE_IN_BYTES	( 32 )

#define STAR_SHADER_MAJOR_VERSION	( 5 )

#define STAR_SHADER_MAX_INSTANCES	( 65535 )

#define STAR_SHADER_MAX_INTERFACES	( 253 )

#define STAR_SHADER_MAX_INTERFACE_CALL_SITES	( 4096 )

#define STAR_SHADER_MAX_TYPES	( 65535 )

#define STAR_SHADER_MINOR_VERSION	( 1 )

#define STAR_SHIFT_INSTRUCTION_PAD_VALUE	( 0 )

#define STAR_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT	( 5 )

#define STAR_SIMULTANEOUS_RENDER_TARGET_COUNT	( 8 )

#define STAR_SMALL_MSAA_RESOURCE_PLACEMENT_ALIGNMENT	( 65536 )

#define STAR_SMALL_RESOURCE_PLACEMENT_ALIGNMENT	( 4096 )

#define STAR_SO_BUFFER_MAX_STRIDE_IN_BYTES	( 2048 )

#define STAR_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES	( 512 )

#define STAR_SO_BUFFER_SLOT_COUNT	( 4 )

#define STAR_SO_DDI_REGISTER_INDEX_DENOTING_GAP	( 0xffffffff )

#define STAR_SO_NO_RASTERIZED_STREAM	( 0xffffffff )

#define STAR_SO_OUTPUT_COMPONENT_COUNT	( 128 )

#define STAR_SO_STREAM_COUNT	( 4 )

#define STAR_SPEC_DATE_DAY	( 14 )

#define STAR_SPEC_DATE_MONTH	( 11 )

#define STAR_SPEC_DATE_YEAR	( 2014 )

#define STAR_STANDARD_COMPONENT_BIT_COUNT	( 32 )

#define STAR_STANDARD_COMPONENT_BIT_COUNT_DOUBLED	( 64 )

#define STAR_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE	( 4 )

#define STAR_STANDARD_PIXEL_COMPONENT_COUNT	( 128 )

#define STAR_STANDARD_PIXEL_ELEMENT_COUNT	( 32 )

#define STAR_STANDARD_VECTOR_SIZE	( 4 )

#define STAR_STANDARD_VERTEX_ELEMENT_COUNT	( 32 )

#define STAR_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT	( 64 )

#define STAR_SUBPIXEL_FRACTIONAL_BIT_COUNT	( 8 )

#define STAR_SUBTEXEL_FRACTIONAL_BIT_COUNT	( 8 )

#define STAR_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_END	( 0xffffffff )

#define STAR_SYSTEM_RESERVED_REGISTER_SPACE_VALUES_START	( 0xfffffff0 )

#define STAR_TESSELLATOR_MAX_EVEN_TESSELLATION_FACTOR	( 64 )

#define STAR_TESSELLATOR_MAX_ISOLINE_DENSITY_TESSELLATION_FACTOR	( 64 )

#define STAR_TESSELLATOR_MAX_ODD_TESSELLATION_FACTOR	( 63 )

#define STAR_TESSELLATOR_MAX_TESSELLATION_FACTOR	( 64 )

#define STAR_TESSELLATOR_MIN_EVEN_TESSELLATION_FACTOR	( 2 )

#define STAR_TESSELLATOR_MIN_ISOLINE_DENSITY_TESSELLATION_FACTOR	( 1 )

#define STAR_TESSELLATOR_MIN_ODD_TESSELLATION_FACTOR	( 1 )

#define STAR_TEXEL_ADDRESS_RANGE_BIT_COUNT	( 16 )

#define STAR_TEXTURE_DATA_PITCH_ALIGNMENT	( 256 )

#define STAR_TEXTURE_DATA_PLACEMENT_ALIGNMENT	( 512 )

#define STAR_TILED_RESOURCE_TILE_SIZE_IN_BYTES	( 65536 )

#define STAR_TRACKED_WORKLOAD_MAX_INSTANCES	( 32 )

#define STAR_UAV_COUNTER_PLACEMENT_ALIGNMENT	( 4096 )

#define STAR_UAV_SLOT_COUNT	( 64 )

#define STAR_UNBOUND_MEMORY_ACCESS_RESULT	( 0 )

#define STAR_VIDEO_DECODE_MAX_ARGUMENTS	( 10 )

#define STAR_VIDEO_DECODE_MAX_HISTOGRAM_COMPONENTS	( 4 )

#define STAR_VIDEO_DECODE_MIN_BITSTREAM_OFFSET_ALIGNMENT	( 256 )

#define STAR_VIDEO_DECODE_MIN_HISTOGRAM_OFFSET_ALIGNMENT	( 256 )

#define STAR_VIDEO_DECODE_STATUS_MACROBLOCKS_AFFECTED_UNKNOWN	( 0xffffffff )

#define STAR_VIDEO_PROCESS_MAX_FILTERS	( 32 )

#define STAR_VIDEO_PROCESS_STEREO_VIEWS	( 2 )

#define STAR_VIEWPORT_AND_SCISSORRECT_MAX_INDEX	( 15 )

#define STAR_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE	( 16 )

#define STAR_VIEWPORT_BOUNDS_MAX	( 32767 )

#define STAR_VIEWPORT_BOUNDS_MIN	( -32768 )

#define STAR_VS_INPUT_REGISTER_COMPONENTS	( 4 )

#define STAR_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_VS_INPUT_REGISTER_COUNT	( 32 )

#define STAR_VS_INPUT_REGISTER_READS_PER_INST	( 2 )

#define STAR_VS_INPUT_REGISTER_READ_PORTS	( 1 )

#define STAR_VS_OUTPUT_REGISTER_COMPONENTS	( 4 )

#define STAR_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT	( 32 )

#define STAR_VS_OUTPUT_REGISTER_COUNT	( 32 )

#define STAR_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT	( 10 )

#define STAR_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP	( 25 )

#define STAR_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP	( 25 )

#define STAR_FILTER_REDUCTION_TYPE_MASK	( 0x3 )

#define STAR_FILTER_REDUCTION_TYPE_SHIFT	( 7 )

#define STAR_FILTER_TYPE_MASK	( 0x3 )

#define STAR_MIN_FILTER_SHIFT	( 4 )

#define STAR_MAG_FILTER_SHIFT	( 2 )

#define STAR_MIP_FILTER_SHIFT	( 0 )

#define STAR_ANISOTROPIC_FILTERING_BIT	( 0x40 )

}

namespace Star {

namespace Graphics {

namespace Render {

struct RECT;
struct DISP_RATIONAL;
struct DISP_SAMPLE_DESC;

enum GFX_DRIVER_TYPE : uint32_t;
enum GFX_FEATURE_LEVEL : uint32_t;
enum GFX_PRIMITIVE_TOPOLOGY : uint32_t;
enum GFX_PRIMITIVE : uint32_t;
enum GFX_SRV_DIMENSION : uint32_t;
enum GFX_NAME : uint32_t;
enum GFX_RESOURCE_RETURN_TYPE : uint32_t;
enum GFX_REGISTER_COMPONENT_TYPE : uint32_t;
enum GFX_TESSELLATOR_DOMAIN : uint32_t;
enum GFX_TESSELLATOR_PARTITIONING : uint32_t;
enum GFX_TESSELLATOR_OUTPUT_PRIMITIVE : uint32_t;
enum GFX_MIN_PRECISION : uint32_t;
enum GFX_INTERPOLATION_MODE : uint32_t;
enum COMMAND_LIST_TYPE : uint32_t;
enum COMMAND_QUEUE_FLAGS : uint32_t;
enum COMMAND_QUEUE_PRIORITY : uint32_t;

struct COMMAND_QUEUE_DESC;

enum PRIMITIVE_TOPOLOGY_TYPE : uint32_t;
enum INPUT_CLASSIFICATION : uint32_t;

struct INPUT_ELEMENT_DESC;

enum FILL_MODE : uint32_t;
enum CULL_MODE : uint32_t;

struct SO_DECLARATION_ENTRY;
struct VIEWPORT;
struct BOX;

enum COMPARISON_FUNC : uint32_t;
enum DEPTH_WRITE_MASK : uint32_t;
enum STENCIL_OP : uint32_t;

struct DEPTH_STENCILOP_DESC;
struct DEPTH_STENCIL_DESC;
struct DEPTH_STENCIL_DESC1;

enum BLEND : uint32_t;
enum BLEND_OP : uint32_t;
enum COLOR_WRITE_ENABLE : uint32_t;
enum LOGIC_OP : uint32_t;

struct RENDER_TARGET_BLEND_DESC;
struct BLEND_DESC;

enum CONSERVATIVE_RASTERIZATION_MODE : uint32_t;

struct RASTERIZER_DESC;
struct SHADER_BYTECODE;
struct STREAM_OUTPUT_DESC;
struct INPUT_LAYOUT_DESC;

enum INDEX_BUFFER_STRIP_CUT_VALUE : uint32_t;

struct CACHED_PIPELINE_STATE;

enum PIPELINE_STATE_FLAGS : uint32_t;

struct GRAPHICS_PIPELINE_STATE_DESC;
struct COMPUTE_PIPELINE_STATE_DESC;
struct PIPELINE_STATE_STREAM_DESC;

enum PIPELINE_STATE_SUBOBJECT_TYPE : uint32_t;
enum FEATURE : uint32_t;
enum SHADER_MIN_PRECISION_SUPPORT : uint32_t;
enum TILED_RESOURCES_TIER : uint32_t;
enum RESOURCE_BINDING_TIER : uint32_t;
enum CONSERVATIVE_RASTERIZATION_TIER : uint32_t;
enum FORMAT_SUPPORT1 : uint32_t;
enum FORMAT_SUPPORT2 : uint32_t;
enum MULTISAMPLE_QUALITY_LEVEL_FLAGS : uint32_t;
enum CROSS_NODE_SHARING_TIER : uint32_t;
enum RESOURCE_HEAP_TIER : uint32_t;
enum PROGRAMMABLE_SAMPLE_POSITIONS_TIER : uint32_t;
enum VIEW_INSTANCING_TIER : uint32_t;

struct FEATURE_DATA_D3D12_OPTIONS;
struct FEATURE_DATA_D3D12_OPTIONS1;
struct FEATURE_DATA_D3D12_OPTIONS2;

enum GFX_ROOT_SIGNATURE_VERSION : uint32_t;

struct FEATURE_DATA_ROOT_SIGNATURE;
struct FEATURE_DATA_ARCHITECTURE;
struct FEATURE_DATA_ARCHITECTURE1;
struct FEATURE_DATA_FEATURE_LEVELS;

enum GFX_SHADER_MODEL : uint32_t;

struct FEATURE_DATA_SHADER_MODEL;
struct FEATURE_DATA_FORMAT_SUPPORT;
struct FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS;
struct FEATURE_DATA_FORMAT_INFO;
struct FEATURE_DATA_GPU_VIRTUAL_ADDRESS_SUPPORT;

enum SHADER_CACHE_SUPPORT_FLAGS : uint32_t;

struct FEATURE_DATA_SHADER_CACHE;
struct FEATURE_DATA_COMMAND_QUEUE_PRIORITY;

enum COMMAND_LIST_SUPPORT_FLAGS : uint32_t;

struct FEATURE_DATA_D3D12_OPTIONS3;
struct FEATURE_DATA_EXISTING_HEAPS;

enum SHARED_RESOURCE_COMPATIBILITY_TIER : uint32_t;

struct FEATURE_DATA_D3D12_OPTIONS4;

enum HEAP_SERIALIZATION_TIER : uint32_t;

struct FEATURE_DATA_SERIALIZATION;
struct FEATURE_DATA_CROSS_NODE;

enum RENDER_PASS_TIER : uint32_t;
enum RAYTRACING_TIER : uint32_t;

struct FEATURE_DATA_D3D12_OPTIONS5;

enum VARIABLE_SHADING_RATE_TIER : uint32_t;

struct FEATURE_DATA_D3D12_OPTIONS6;
struct FEATURE_DATA_QUERY_META_COMMAND;
struct RESOURCE_ALLOCATION_INFO;
struct RESOURCE_ALLOCATION_INFO1;

enum HEAP_TYPE : uint32_t;
enum CPU_PAGE_PROPERTY : uint32_t;
enum MEMORY_POOL : uint32_t;

struct HEAP_PROPERTIES;

enum HEAP_FLAGS : uint32_t;

struct HEAP_DESC;

enum RESOURCE_DIMENSION : uint32_t;
enum TEXTURE_LAYOUT : uint32_t;
enum RESOURCE_FLAGS : uint32_t;

struct RESOURCE_DESC;
struct DEPTH_STENCIL_VALUE;
struct CLEAR_VALUE;
struct RANGE;
struct RANGE_UINT64;
struct SUBRESOURCE_RANGE_UINT64;
struct SUBRESOURCE_INFO;
struct TILED_RESOURCE_COORDINATE;
struct TILE_REGION_SIZE;

enum TILE_RANGE_FLAGS : uint32_t;

struct SUBRESOURCE_TILING;
struct TILE_SHAPE;
struct PACKED_MIP_INFO;

enum TILE_MAPPING_FLAGS : uint32_t;
enum TILE_COPY_FLAGS : uint32_t;
enum RESOURCE_STATES : uint32_t;
enum RESOURCE_BARRIER_TYPE : uint32_t;

struct RESOURCE_TRANSITION_BARRIER;
struct RESOURCE_ALIASING_BARRIER;
struct RESOURCE_UAV_BARRIER;

enum RESOURCE_BARRIER_FLAGS : uint32_t;

struct RESOURCE_BARRIER;
struct SUBRESOURCE_FOOTPRINT;
struct PLACED_SUBRESOURCE_FOOTPRINT;

enum TEXTURE_COPY_TYPE : uint32_t;

struct TEXTURE_COPY_LOCATION;

enum RESOLVE_MODE : uint32_t;

struct SAMPLE_POSITION;
struct VIEW_INSTANCE_LOCATION;

enum VIEW_INSTANCING_FLAGS : uint32_t;

struct VIEW_INSTANCING_DESC;

enum SHADER_COMPONENT_MAPPING : uint32_t;
enum BUFFER_SRV_FLAGS : uint32_t;

struct BUFFER_SRV;
struct TEX1D_SRV;
struct TEX1D_ARRAY_SRV;
struct TEX2D_SRV;
struct TEX2D_ARRAY_SRV;
struct TEX3D_SRV;
struct TEXCUBE_SRV;
struct TEXCUBE_ARRAY_SRV;
struct TEX2DMS_SRV;
struct TEX2DMS_ARRAY_SRV;
struct RAYTRACING_ACCELERATION_STRUCTURE_SRV;

enum SRV_DIMENSION : uint32_t;

struct SHADER_RESOURCE_VIEW_DESC;
struct CONSTANT_BUFFER_VIEW_DESC;

enum FILTER : uint32_t;
enum FILTER_TYPE : uint32_t;
enum FILTER_REDUCTION_TYPE : uint32_t;
enum TEXTURE_ADDRESS_MODE : uint32_t;

struct SAMPLER_DESC;

enum BUFFER_UAV_FLAGS : uint32_t;

struct BUFFER_UAV;
struct TEX1D_UAV;
struct TEX1D_ARRAY_UAV;
struct TEX2D_UAV;
struct TEX2D_ARRAY_UAV;
struct TEX3D_UAV;

enum UAV_DIMENSION : uint32_t;

struct UNORDERED_ACCESS_VIEW_DESC;
struct BUFFER_RTV;
struct TEX1D_RTV;
struct TEX1D_ARRAY_RTV;
struct TEX2D_RTV;
struct TEX2DMS_RTV;
struct TEX2D_ARRAY_RTV;
struct TEX2DMS_ARRAY_RTV;
struct TEX3D_RTV;

enum RTV_DIMENSION : uint32_t;

struct RENDER_TARGET_VIEW_DESC;
struct TEX1D_DSV;
struct TEX1D_ARRAY_DSV;
struct TEX2D_DSV;
struct TEX2D_ARRAY_DSV;
struct TEX2DMS_DSV;
struct TEX2DMS_ARRAY_DSV;

enum DSV_FLAGS : uint32_t;
enum DSV_DIMENSION : uint32_t;

struct DEPTH_STENCIL_VIEW_DESC;

enum CLEAR_FLAGS : uint32_t;
enum FENCE_FLAGS : uint32_t;
enum DESCRIPTOR_HEAP_TYPE : uint32_t;
enum DESCRIPTOR_HEAP_FLAGS : uint32_t;

struct DESCRIPTOR_HEAP_DESC;

enum DESCRIPTOR_RANGE_TYPE : uint32_t;

struct DESCRIPTOR_RANGE;
struct ROOT_DESCRIPTOR_TABLE;
struct ROOT_CONSTANTS;
struct ROOT_DESCRIPTOR;

enum SHADER_VISIBILITY : uint32_t;
enum ROOT_PARAMETER_TYPE : uint32_t;

struct ROOT_PARAMETER;

enum ROOT_SIGNATURE_FLAGS : uint32_t;
enum STATIC_BORDER_COLOR : uint32_t;

struct STATIC_SAMPLER_DESC;
struct ROOT_SIGNATURE_DESC;

enum DESCRIPTOR_RANGE_FLAGS : uint32_t;

struct DESCRIPTOR_RANGE1;
struct ROOT_DESCRIPTOR_TABLE1;

enum ROOT_DESCRIPTOR_FLAGS : uint32_t;

struct ROOT_DESCRIPTOR1;
struct ROOT_PARAMETER1;
struct ROOT_SIGNATURE_DESC1;
struct VERSIONED_ROOT_SIGNATURE_DESC;
struct CPU_DESCRIPTOR_HANDLE;
struct GPU_DESCRIPTOR_HANDLE;
struct DISCARD_REGION;

enum QUERY_HEAP_TYPE : uint32_t;

struct QUERY_HEAP_DESC;

enum QUERY_TYPE : uint32_t;
enum PREDICATION_OP : uint32_t;

struct QUERY_DATA_PIPELINE_STATISTICS;
struct QUERY_DATA_SO_STATISTICS;
struct STREAM_OUTPUT_BUFFER_VIEW;
struct DRAW_ARGUMENTS;
struct DRAW_INDEXED_ARGUMENTS;
struct DISPATCH_ARGUMENTS;
struct VERTEX_BUFFER_VIEW;
struct INDEX_BUFFER_VIEW;

enum INDIRECT_ARGUMENT_TYPE : uint32_t;

struct INDIRECT_ARGUMENT_DESC;
struct COMMAND_SIGNATURE_DESC;
struct WRITEBUFFERIMMEDIATE_PARAMETER;

enum WRITEBUFFERIMMEDIATE_MODE : uint32_t;
enum MULTIPLE_FENCE_WAIT_FLAGS : uint32_t;
enum RESIDENCY_PRIORITY : uint32_t;
enum RESIDENCY_FLAGS : uint32_t;
enum COMMAND_LIST_FLAGS : uint32_t;
enum COMMAND_POOL_FLAGS : uint32_t;
enum COMMAND_RECORDER_FLAGS : uint32_t;
enum PROTECTED_SESSION_STATUS : uint32_t;
enum PROTECTED_RESOURCE_SESSION_SUPPORT_FLAGS : uint32_t;

struct FEATURE_DATA_PROTECTED_RESOURCE_SESSION_SUPPORT;

enum PROTECTED_RESOURCE_SESSION_FLAGS : uint32_t;

struct PROTECTED_RESOURCE_SESSION_DESC;

enum LIFETIME_STATE : uint32_t;
enum META_COMMAND_PARAMETER_TYPE : uint32_t;
enum META_COMMAND_PARAMETER_FLAGS : uint32_t;
enum META_COMMAND_PARAMETER_STAGE : uint32_t;

struct META_COMMAND_PARAMETER_DESC;

enum GRAPHICS_STATES : uint32_t;

struct META_COMMAND_DESC;

enum STATE_SUBOBJECT_TYPE : uint32_t;

struct STATE_SUBOBJECT;

enum STATE_OBJECT_FLAGS : uint32_t;

struct STATE_OBJECT_CONFIG;
struct GLOBAL_ROOT_SIGNATURE;
struct LOCAL_ROOT_SIGNATURE;
struct NODE_MASK;

enum EXPORT_FLAGS : uint32_t;

struct EXPORT_DESC;
struct DXIL_LIBRARY_DESC;
struct EXISTING_COLLECTION_DESC;
struct SUBOBJECT_TO_EXPORTS_ASSOCIATION;
struct DXIL_SUBOBJECT_TO_EXPORTS_ASSOCIATION;

enum HIT_GROUP_TYPE : uint32_t;

struct HIT_GROUP_DESC;
struct RAYTRACING_SHADER_CONFIG;
struct RAYTRACING_PIPELINE_CONFIG;

enum STATE_OBJECT_TYPE : uint32_t;

struct STATE_OBJECT_DESC;

enum RAYTRACING_GEOMETRY_FLAGS : uint32_t;
enum RAYTRACING_GEOMETRY_TYPE : uint32_t;
enum RAYTRACING_INSTANCE_FLAGS : uint32_t;

struct GPU_VIRTUAL_ADDRESS_AND_STRIDE;
struct GPU_VIRTUAL_ADDRESS_RANGE;
struct GPU_VIRTUAL_ADDRESS_RANGE_AND_STRIDE;
struct RAYTRACING_GEOMETRY_TRIANGLES_DESC;
struct RAYTRACING_AABB;
struct RAYTRACING_GEOMETRY_AABBS_DESC;

enum RAYTRACING_ACCELERATION_STRUCTURE_BUILD_FLAGS : uint32_t;
enum RAYTRACING_ACCELERATION_STRUCTURE_COPY_MODE : uint32_t;
enum RAYTRACING_ACCELERATION_STRUCTURE_TYPE : uint32_t;
enum ELEMENTS_LAYOUT : uint32_t;
enum RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TYPE : uint32_t;

struct RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_DESC;
struct RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_COMPACTED_SIZE_DESC;
struct RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_TOOLS_VISUALIZATION_DESC;
struct BUILD_RAYTRACING_ACCELERATION_STRUCTURE_TOOLS_VISUALIZATION_HEADER;
struct RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_SERIALIZATION_DESC;
struct SERIALIZED_DATA_DRIVER_MATCHING_IDENTIFIER;

enum SERIALIZED_DATA_TYPE : uint32_t;
enum DRIVER_MATCHING_IDENTIFIER_STATUS : uint32_t;

struct SERIALIZED_RAYTRACING_ACCELERATION_STRUCTURE_HEADER;
struct RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_CURRENT_SIZE_DESC;
struct RAYTRACING_INSTANCE_DESC;
struct RAYTRACING_GEOMETRY_DESC;
struct BUILD_RAYTRACING_ACCELERATION_STRUCTURE_INPUTS;
struct BUILD_RAYTRACING_ACCELERATION_STRUCTURE_DESC;
struct RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO;

enum RAY_FLAGS : uint32_t;
enum HIT_KIND : uint32_t;
enum AUTO_BREADCRUMB_OP : uint32_t;

struct AUTO_BREADCRUMB_NODE;

enum DRED_VERSION : uint32_t;
enum DRED_FLAGS : uint32_t;
enum DRED_ENABLEMENT : uint32_t;

struct DEVICE_REMOVED_EXTENDED_DATA;

enum DRED_ALLOCATION_TYPE : uint32_t;

struct DRED_ALLOCATION_NODE;
struct DRED_AUTO_BREADCRUMBS_OUTPUT;
struct DRED_PAGE_FAULT_OUTPUT;
struct DEVICE_REMOVED_EXTENDED_DATA1;
struct VERSIONED_DEVICE_REMOVED_EXTENDED_DATA;

enum BACKGROUND_PROCESSING_MODE : uint32_t;
enum MEASUREMENTS_ACTION : uint32_t;
enum RENDER_PASS_BEGINNING_ACCESS_TYPE : uint32_t;

struct RENDER_PASS_BEGINNING_ACCESS_CLEAR_PARAMETERS;
struct RENDER_PASS_BEGINNING_ACCESS;

enum RENDER_PASS_ENDING_ACCESS_TYPE : uint32_t;

struct RENDER_PASS_ENDING_ACCESS_RESOLVE_SUBRESOURCE_PARAMETERS;
struct RENDER_PASS_ENDING_ACCESS_RESOLVE_PARAMETERS;
struct RENDER_PASS_ENDING_ACCESS;
struct RENDER_PASS_RENDER_TARGET_DESC;
struct RENDER_PASS_DEPTH_STENCIL_DESC;

enum RENDER_PASS_FLAGS : uint32_t;

struct DISPATCH_RAYS_DESC;
struct SUBRESOURCE_DATA;
struct MEMCPY_DEST;

enum AXIS_SHADING_RATE : uint32_t;
enum SHADING_RATE : uint32_t;
enum SHADING_RATE_COMBINER : uint32_t;

struct LargeWidth;
struct Width;
struct Height;
struct Immediate_;
struct TiledImmediate_;
struct TiledDeferred_;

using GpuArch = std::variant<Immediate_, TiledImmediate_, TiledDeferred_>;

struct Direct3D_;
struct Vulkan_;
struct Metal_;
struct OpenGL_;

using API = std::variant<Direct3D_, Vulkan_, Metal_>;

struct BINORMAL_;
struct BLENDINDICES_;
struct BLENDWEIGHT_;
struct NORMAL_;
struct POSITIONT_;
struct PSIZE_;
struct TANGENT_;
struct TEXCOORD_;
struct SV_ClipDistance_;
struct SV_CullDistance_;
struct SV_Coverage_;
struct SV_Depth_;
struct SV_DepthGreaterEqual_;
struct SV_DepthLessEqual_;
struct SV_DispatchThreadID_;
struct SV_DomainLocation_;
struct SV_GroupID_;
struct SV_GroupIndex_;
struct SV_GroupThreadID_;
struct SV_GSInstanceID_;
struct SV_InnerCoverage_;
struct SV_InsideTessFactor_;
struct SV_InstanceID_;
struct SV_IsFrontFace_;
struct SV_OutputControlPointID_;
struct SV_Position_;
struct SV_PrimitiveID_;
struct SV_RenderTargetArrayIndex_;
struct SV_SampleIndex_;
struct SV_StencilRef_;
struct SV_Target_;
struct SV_TessFactor_;
struct SV_VertexID_;
struct SV_ViewportArrayIndex_;

using VertexElementType = std::variant<BINORMAL_, BLENDINDICES_, BLENDWEIGHT_, NORMAL_, POSITIONT_, PSIZE_, TANGENT_, TEXCOORD_, SV_Position_, SV_Target_>;
using SemanticType = std::variant<std::monostate, BINORMAL_, BLENDINDICES_, BLENDWEIGHT_, NORMAL_, POSITIONT_, PSIZE_, TANGENT_, TEXCOORD_, SV_ClipDistance_, SV_CullDistance_, SV_Coverage_, SV_Depth_, SV_DepthGreaterEqual_, SV_DepthLessEqual_, SV_DispatchThreadID_, SV_DomainLocation_, SV_GroupID_, SV_GroupIndex_, SV_GroupThreadID_, SV_GSInstanceID_, SV_InnerCoverage_, SV_InsideTessFactor_, SV_InstanceID_, SV_IsFrontFace_, SV_OutputControlPointID_, SV_Position_, SV_PrimitiveID_, SV_RenderTargetArrayIndex_, SV_SampleIndex_, SV_StencilRef_, SV_Target_, SV_TessFactor_, SV_VertexID_, SV_ViewportArrayIndex_>;

struct CBV_;
struct UAV_;
struct SRV_;
struct SSV_;
struct RTV_;
struct DSV_;
struct IBV_;
struct VBV_;
struct SOV_;
struct Table_;
struct Constants_;

using RootParameterType = std::variant<Constants_, CBV_, UAV_, SRV_, Table_, SSV_>;
using DescriptorType = std::variant<CBV_, UAV_, SRV_, SSV_>;

struct OM_;
struct PS_;
struct GS_;
struct DS_;
struct TS_;
struct HS_;
struct VS_;
struct CS_;

using ShaderStageType = std::variant<OM_, PS_, GS_, DS_, TS_, HS_, VS_, CS_>;
using ShaderVisibilityType = std::variant<std::monostate, PS_, GS_, DS_, HS_, VS_>;

enum UpdateEnum : uint32_t;

struct Dynamic_;
struct Persistent_;

using Persistency = std::variant<Dynamic_, Persistent_>;

struct DescriptorIndex;
struct EngineSource_;
struct RenderTargetSource_;
struct MaterialSource_;

using DescriptorSource = std::variant<EngineSource_, RenderTargetSource_, MaterialSource_>;

struct matrix_;
struct double4_;
struct double3_;
struct double2_;
struct double1_;
struct float4_;
struct float3_;
struct float2_;
struct float1_;
struct half4_;
struct half3_;
struct half2_;
struct half1_;
struct uint4_;
struct uint3_;
struct uint2_;
struct uint1_;
struct int4_;
struct int3_;
struct int2_;
struct int1_;
struct fixed4_;
struct fixed3_;
struct fixed2_;
struct fixed1_;
struct InputPatch_;
struct OutputPatch_;
struct CBuffer_;
struct Buffer_;
struct ByteAddressBuffer_;
struct StructuredBuffer_;
struct AppendStructuredBuffer_;
struct ConsumeStructuredBuffer_;
struct Texture1D_;
struct Texture1DArray_;
struct Texture2D_;
struct Texture2DArray_;
struct Texture2DMS_;
struct Texture2DMSArray_;
struct Texture3D_;
struct TextureCube_;
struct TextureCubeArray_;
struct RWBuffer_;
struct RWByteAddressBuffer_;
struct RWStructuredBuffer_;
struct RWTexture1D_;
struct RWTexture1DArray_;
struct RWTexture2D_;
struct RWTexture2DArray_;
struct RWTexture3D_;
struct SamplerState_;

using AttributeType = std::variant<matrix_, float4_, uint4_, int4_, float2_, uint2_, int2_, half4_, float1_, uint1_, int1_, half2_, fixed4_, half1_, InputPatch_, OutputPatch_, CBuffer_, Buffer_, ByteAddressBuffer_, StructuredBuffer_, Texture1D_, Texture1DArray_, Texture2D_, Texture2DArray_, Texture2DMS_, Texture2DMSArray_, Texture3D_, TextureCube_, TextureCubeArray_, AppendStructuredBuffer_, ConsumeStructuredBuffer_, RWBuffer_, RWByteAddressBuffer_, RWStructuredBuffer_, RWTexture1D_, RWTexture1DArray_, RWTexture2D_, RWTexture2DArray_, RWTexture3D_, SamplerState_>;

} // namespace Render

} // namespace Graphics

} // namespace Star
